package com.stefanini.pe.bbva.bp.in.dao.impl;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.stefanini.pe.bbva.bp.in.dao.iface.CuestionarioDAOIface;
import com.stefanini.pe.bbva.bp.in.to.Cuestionario;
import com.stefanini.pe.bbva.bp.in.to.Distribucion;

@Repository
public class CuestionarioDAOImpl extends SqlMapClientDaoSupport implements CuestionarioDAOIface {
	
	@Autowired
	public CuestionarioDAOImpl(SqlMapClient sqlMapClient) {
		setSqlMapClient(sqlMapClient);
	}

	@SuppressWarnings("unchecked")
	public List consultarCuestionario() {
		HashMap map = new HashMap();
		
		getSqlMapClientTemplate().queryForList(
				"BP_Cuestionario_SqlMap.cons_cuestionario",map
				);
		
		return (List) map.get("result");
	}
	
	@SuppressWarnings("unchecked")
	public List consultarEscenario(int idPregunta) {

		HashMap map = new HashMap();
		map.put("idpregunta", idPregunta);
		getSqlMapClientTemplate().queryForList(
				"BP_Cuestionario_SqlMap.cons_escenario",map
				);
		
		return (List) map.get("result");
	}
	
	@SuppressWarnings("unchecked")
	public List consultarIncongruencias() {
		HashMap map = new HashMap();
		
		getSqlMapClientTemplate().queryForList(
				"BP_Cuestionario_SqlMap.cons_incongruencia",map
				);
		
		return (List) map.get("result");	
	}	
	
	@SuppressWarnings("unchecked")
	public HashMap cuestProcesa(String pregunta, String alternativa) {
		HashMap map = new HashMap();		
		map.put("idpregunta",pregunta);
		map.put("idalternativa", alternativa);		
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.cuest_procesa",map);		
		return map;	
	}
	
	@SuppressWarnings("unchecked")
	public List cuestRecomend(int idPerfil) {
		HashMap map = new HashMap();
		map.put("idperfil", idPerfil);		
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.cons_recomend",map);		
		return (List) map.get("result");	
	}
	
	@SuppressWarnings("unchecked")
	public int insCuest(Cuestionario beanCuest){	
		try{
			getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.ins_cuest",beanCuest);	
			
			return 1;
		}catch(Exception e){			
			e.printStackTrace();
			return -1;
		}		
	}
	
	@SuppressWarnings("unchecked")
	public void insCuestNoCliente(Cuestionario beanCuest) {				
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.ins_cuest_no_cliente",beanCuest);		
	}
	
	public List consultarBackTest(int idPerfil){
		HashMap map = new HashMap();	
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.cons_backtest",map);		
		return (List) map.get("result");
	}
	
	public List consultarLim(int idPerfil){
		HashMap map = new HashMap();
		map.put("idperfil", idPerfil==0?"":idPerfil);		
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.cons_limites",map);		
		return (List) map.get("result");
	}
	
	public List consultarDca(int idPerfil){
		HashMap map = new HashMap();
		map.put("idperfil", idPerfil==0?"":idPerfil);		
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.cons_dca",map);		
		return (List) map.get("result");
	}
	
	public List consultarDpp(int idPerfil){
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("idperfil", new BigDecimal(idPerfil));
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.cons_dpp",map);
		return (List) map.get("result");
	}
	
	public List<Distribucion> consultarDppPerfil(int idPerfil){
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("idperfil", new BigDecimal(idPerfil));
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.cons_dpp_perfil",map);
		return (List<Distribucion>) map.get("result");
	}
	
	public Map consultarReporte(){
		HashMap map = new HashMap();		
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.cons_rep",map);	
		List lista = (List) map.get("result");
		return (Map)lista.get(0);				
	}
	
	public int actualizarArchivo(Cuestionario beanCuest){
		try{
			//getSqlMapClientTemplate().update("BP_Cuestionario_SqlMap.actu_archivo",beanCuest);
			HashMap map = new HashMap();
			map.put("in_idperfilamiento", beanCuest.getIdPerfilamiento());
			map.put("in_archivocuestionario", beanCuest.getArchivocuestionario());
			getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.actualizaperfilaArchivoCl", map);
			//System.out.println("Perfilamiento act archivo BP_Cuestionario_SqlMap.actualizaperfilaArchivoCl");
			return 1;
		}catch(Exception e){
			e.printStackTrace();
			return -1;
		}
	}
	
	public int actualizarArchivoNoCliente(Cuestionario beanCuest){
		try{
			//getSqlMapClientTemplate().update("BP_Cuestionario_SqlMap.actu_archivo_noCliente",beanCuest);
			HashMap map = new HashMap();
			map.put("in_idperfilamiento", beanCuest.getIdPerfilamiento());
			map.put("in_archivocuestionario", beanCuest.getArchivocuestionario());
			getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.actualizaperfilaArchivoNCl", map);
			//System.out.println("Perfilamiento act archivo BP_Cuestionario_SqlMap.actualizaperfilaArchivoCl");
			return 1;
		}catch(Exception e){
			e.printStackTrace();
			return -1;
		}
	}
	
	public List consultaClienteDoc(HashMap map){
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.consultaClienteDoc",map);
		return (List) map.get("out_result");	
	}
	
	public void actualizarClienteDoc(HashMap map){
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.actualizarClienteDoc",map);
	}
	
	public List consultaCuestionarioPregunta(String idSeccion) throws Exception{
		HashMap map = new HashMap();
		map.put("in_idseccion", idSeccion);
		
		System.out.println("sp: IIAF.piiaf_parametria.sp_cons_pa_cuest_preguntas, params: "+map);
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.consultaCuestionarioPregunta",map);
		return (List) map.get("out_result_set");
	}
	
	public void grabarCuestionario(HashMap map){
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.insertarCuestionario",map);
	}
	
	public void actualizarCuestionario(HashMap map){
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.actualizarCuestionario",map);
	}
	
	public void eliminarCuestionario(String idPregunta){
		HashMap map = new HashMap();
		map.put("in_idpregunta", idPregunta);
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.eliminarCuestionario",map);
	}
	
	public void ordenarCuestionario(HashMap map){
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.ordenarCuestionario",map);
	}
	
	public List consultaCuestionarioAlternativa(String idpregunta) throws Exception{
		HashMap map = new HashMap();
		map.put("in_idpregunta", idpregunta);
		
		System.out.println("sp: IIAF.piiaf_parametria.sp_cons_pa_cuest_alternativas, params: "+map);
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.consultaCuestionarioAlternativa",map);
		return (List) map.get("out_result_set");	
	}
	
	public void grabarCuestionarioAlternativa(HashMap map) throws Exception{
		
		System.out.println("sp: IIAF.piiaf_parametria.sp_inser_pa_cuest_alternativas, params: "+map);
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.insertarCuestionarioAlternativa",map);
	}
	
	public void actualizarCuestionarioAlternativa(HashMap map) throws Exception{
		
		System.out.println("sp: IIAF.piiaf_parametria.sp_actu_pa_cuest_alternativas, params: "+map);
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.actualizarCuestionarioAlternativa",map);
	}
	
	public void eliminarCuestionarioAlternativa(String idPregunta, String idAlternativa) throws Exception{
		HashMap map = new HashMap();
		map.put("in_idpregunta", idPregunta);
		map.put("in_idalternativa", idAlternativa);
		
		System.out.println("sp: IIAF.piiaf_parametria.sp_elim_pa_cuest_alternativas, params: "+map);
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.eliminarCuestionarioAlternativa",map);
	}
	
	public void ordenarCuestionarioAlternativa(HashMap map) throws Exception{
		
		System.out.println("sp: IIAF.piiaf_parametria.sp_cons_pa_cuest_oalternativas, params: "+map);
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.ordenarCuestionarioAlternativa",map);
	}
	
	public List seleccionarEscenariosAlternativa(HashMap map) throws Exception{
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.seleccionarEscenariosAlternativa",map);
		return (List) map.get("out_result_set");	
	}
	
	public List consultaIncongruencias() throws Exception{
		HashMap map = new HashMap();
		
		System.out.println("sp: IIAF.piiaf_parametria.sp_cons_pa_incongruencia, params: "+map);
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.seleccionarIncongruencias",map);
		return (List) map.get("out_result_set");
	}
	
	public void insertarIncongruencias(Map param){
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.insertarIncongruencias",param);
	}
	
	public void actualizarIncongruencias(Map param){
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.actualizarIncongruencias",param);
	}
	
	public void eliminarIncongruencia(String idIncongruencia){
		Map param =new HashMap();
		param.put("in_idincongruencia", idIncongruencia);
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.eliminarIncongruencias",param);
	}
	
	public List seleccionarPreguntasIncg(String idIncongruencia) throws Exception{
		HashMap map = new HashMap();
		map.put("IN_idincongruencia", idIncongruencia);
		
		System.out.println("sp: IIAF.piiaf_parametria.sp_cons_pa_preg_para_incongru, params: "+map);
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.seleccionarPreguntasIncg",map);
		return (List) map.get("out_result_set");
	}
	
	public List<Map<String, String>> seleccionarCattp(String idCategoria){
		HashMap map = new HashMap();
		map.put("in_idcategoriaporproducto", idCategoria);
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.cons_cattp",map);
		return (List<Map<String, String>>) map.get("result");
	}
	
	public void insertarPerfilInversion(Map<String, Object> parametros) throws Exception{
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.insertarPerfilInversion",parametros);
	}
	
	public void actualizarPerfilInversion(Map<String, Object> parametros) throws Exception{
		getSqlMapClientTemplate().queryForObject("BP_Cuestionario_SqlMap.actualizarPerfilInversion",parametros);
	}
	
	public List<HashMap> obtCuest(String idcodigo)
	{
		try {	
			HashMap map=new HashMap();
			map.put("in_pIdPerfilamiento", idcodigo);
			getSqlMapClientTemplate().queryForList("BP_Cuestionario_SqlMap.cons_obtCuest",map);
			return (List) map.get("result");	
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public List<HashMap> obtCuestNCL(String idcodigo)
	{
		try {	
			HashMap map=new HashMap();
			map.put("in_pIdPerfilamiento", idcodigo);
			getSqlMapClientTemplate().queryForList("BP_Cuestionario_SqlMap.cons_obtCuestNCL",map);
			return (List) map.get("result");	
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
}
